from plugins.CheckerBase import CheckerBase
import time


class Common(CheckerBase):
    def __init__(self, ssh_client):
        super().__init__(ssh_client)

    def check_web(self, ip='127.0.0.1', port=80):
        """
        检查XXX服务的web服务是否正常

        :param ip: web服务IP地址
        :param port: Web服务端口，默认为80。
        :return: 一个包含结果和错误信息的元组。
        """
        cmd = f'curl -X GET --connect-timeout 30 http://{ip}:{port}/console/login |grep -c "关键字"'
        return self.run_command(cmd)

    def check_data_partition_useage(self):
        """
        检查[/data]挂载分区使用率是否超过90%

        :return: 一个包含结果和错误信息的元组。
        """
        cmd = 'df -h /data | awk \'NR==2 {printf "%.0f", $5}\''
        return self.run_command(cmd)

    def check_root_partition_useage(self):
        """
        检查[/]挂载分区使用率是否超过90%

        :return: 一个包含结果和错误信息的元组。
        """
        cmd = 'df -h / | awk \'NR==2 {printf "%.0f", $5}\''
        return self.run_command(cmd)

    def check_mem_useage(self):
        """
        检查内存使用率是否超过90%

        :return: 一个包含结果和错误信息的元组。
        """
        cmd = 'free -m | awk \'NR==2 {used = $3; total = $2; usage = used * 100 / total; printf "%.0f", usage}\''
        return self.run_command(cmd)

    def check_cpu_usage(self):
        """
        检查 CPU 使用率低于 90%

        :return: 一个包含结果和错误信息的元组。
        """
        cmd = 'top -b -n 1 | grep "Cpu(s)" | awk \' {usage = $2 + $4; printf "%.0f", usage}\''
        return self.run_command(cmd)

    def check_host_time_difference(self):
        """
        检查目标主机与本机服务器时间差是否小于 1 秒

        :return: 一个包含结果和错误信息的元组。
        """
        cmd = "LANG=C date '+%s.%N'"
        result, result_err = self.run_command(cmd)
        local_time = time.time()
        target_time = float(result)
        if abs(local_time - target_time) < 1:
            # 1表示通过
            return 1, result_err
        else:
            # 0表示未通过
            return 0, result_err
